React element 處理事件跟使用 DOM element 處理事件差異:
<element onclick="myScript[String]"> \\React DOM
<element onClick="myScript[Function]"> \\HTML DOM
Class Component 或 function component 稍微有不同的寫法,但差不多是
以下完整例子
class Toggle extends React.Component {
constructor(props) {
super(props);
this.state = {isToggleOn: true};
// 為了讓 `this` 能在 callback 中被使用,這裡的綁定是必要的:
this.handleClick = this.handleClick.bind(this);
}
handleClick() {
this.setState(prevState => ({
isToggleOn: !prevState.isToggleOn
}));
}
render() {
return (
<button onClick={this.handleClick}>
{this.state.isToggleOn ? 'ON' : 'OFF'} </button>
);
}}
ReactDOM.render(
<Toggle />, document.getElementById('root'));
const { useState } = React;
function Toggle() {
const [state, setState] = useState(true);
function handleClick(e) {
e.preventDefault();
setState(!state)
}
return (
<button onClick={handleClick}>
{state ? 'ON' : 'OFF'}
</button>
);
}
ReactDOM.render(
<Toggle />,
document.getElementById('root')
);
class Toggle extends React.Component {
//略
handleClick(id) {
console.log(id) //#a5aa
this.setState(prevState => ({
isToggleOn: !prevState.isToggleOn
}));
}
render() {
return (
<button onClick={this.handleClick.bind(this, '#a5aa')}>
{this.state.isToggleOn ? 'ON' : 'OFF'} </button>
);
}}
//略
除了使用 bind 也可以寫成 arrow function ,而下一篇會繼續介紹為什麼要使用 bind 。
button onClick={() => this.deleteRow('id')}>Delete Row</button>
<button onClick={this.deleteRow.bind(this, 'id')}>Delete Row</button>
以上今天
參考資料:
https://zh-hant.reactjs.org/docs/handling-events.html
理解 JS 裡面的 bind